Перейти к основному содержимому

4.11. Десктопные приложения

Разработчику Архитектору Инженеру
Десктопные приложения - как они создаются?
Десктоп
Толстый и тонкий клиент
Портирование и мультиплатформенность
Виды десктопных приложений - консольное, и иные

Десктоп

Десктоп (от англ. desktop — «рабочий стол») — это термин, обозначающий:

  • Физическое устройство: настольный компьютер (в отличие от ноутбука, планшета, смартфона).
  • Программное обеспечение: приложения, предназначенные для работы на таких компьютерах — десктопные приложения.
  • Интерфейс: графический рабочий стол операционной системы (например, Windows, macOS, Linux), где расположены иконки, панели, окна.

Термин появился в 1980-х годах с развитием персональных компьютеров и графических интерфейсов. Компьютеры стали ассоциироваться с рабочим столом пользователя — метафорой реального стола, на котором лежат документы, папки, инструменты. Apple Macintosh (1984) и позже Windows популяризировали эту концепцию.

Десктопные приложения - это программы, устанавливаемые и запускаемые локально на компьютере пользователя. Они работают независимо от браузера и интернета (хотя могут с ним взаимодействовать). К примеру, Microsoft Word, Photoshop, VLC, Notepad++, Steam, Telegram Desktop.

Кроме десктопных, бывают ещё веб-приложения и мобильные приложения.

Основная особенность десктопных приложений - наличие окна.

Окно — это прямоугольная область на экране, в которой отображается содержимое одного приложения или документа. Позволяет работать с несколькими программами одновременно.

Это часть графического пользовательского интерфейса (GUI) — замена командной строки. Концепция окон была разработана в Xerox PARC в 1970-х годах. Впервые массово внедрена в Apple Lisa (1983) и Macintosh (1984). Позже перенята Microsoft в Windows 1.0 (1985).

Основные особенности десктопных приложений:

  • Устанавливаются локально (через инсталлятор, .exe, .dmg, .deb и т.д.).
  • Полный доступ к ресурсам компьютера: файловая система, железо (камера, принтер, GPU), реестр (Windows).
  • Высокая производительность — прямой доступ к CPU, памяти.
  • Могут работать без интернета.
  • Поддерживают сложные UI и многозадачность (множество окон, drag-and-drop, горячие клавиши).
  • Требуют обновлений (вручную или автоматически).
  • Зависят от ОС — Windows, macOS, Linux.

Для разработки десктопных приложений можно использовать почти любой язык:

  • C# - WPF, WinForms, MAUI, Avalonia
  • C++ - Qt, WinAPI, MFC, wxWidgets
  • Java - JavaFX, Swing, AWT
  • Python - Tkinter, PyQt, Kivy, PySide
  • JavaScript - Electron, Tauri, Neutralino.js
  • Rust - Tauri, Slint, Iced
  • Go - Fyne, Walk, Gio

Самыми лучшими языками под Windows можно считать именно первые три - C#, C++ и Java. Другие имеют некоторые особенности, но в основном работают медленнее, к примеру, Electron в JS позволяет писать десктопные приложения на HTML/CSS/JS, но они «тяжёлые» (запускают Chromium под капотом). Примеры: VS Code, Slack, Discord.

Программа, запускаемая на компьютере, называется клиентом, который бывает толстым и тонким.

Толстый клиент (Fat / Thick Client):

  • Приложение делает большую часть работы локально.
  • Хранит логику, данные, UI на компьютере пользователя.
  • Минимальная зависимость от сервера.
  • Пример: Photoshop, игры, офисные программы.

Тонкий клиент (Thin Client)

  • Приложение — в основном интерфейс, логика и данные — на сервере.
  • Зависит от интернета и сервера.
  • Пример: веб-приложения (Google Docs), терминалы для удалённого доступа.

Десктопные приложения чаще всего — толстые клиенты, но могут быть и гибридными (например, Telegram Desktop — частично локальная логика, частично синхронизация с сервером).

Поскольку десктоп на каждой платформе отличается, порой разработка сначала ведётся под одну платформу, затем адаптируется под другую - это портирование.

Портирование — процесс адаптации программы для работы на другой платформе (например, с Windows на macOS). Требует изменения кода, UI, иногда архитектуры и зачастую бывает трудоёмким. Поэтому программы сейчас пишут изначально с расчётом на возможность работы с разных платформ - это мультиплатформенность.

Мультиплатформенность — способность приложения работать на нескольких ОС без изменений или с минимальными правками. Достигается с помощью кроссплатформенных фреймворков, языков с виртуальной машиной и компиляцией под разные платформы.

Можно выделить следующие виды десктопных приложений:

  • Консольные приложения (Console Applications) - работают в терминале/командной строке, не имеют графического интерфейса, используются для скриптов, утилит, серверных задач.
  • Графические приложения (GUI Applications) - имеют окна, кнопки, меню, мышь, клавиатуру. Подразделяются на однооконные, многооконные (MDI), системные трей-приложения (фоновые процессы) и полноэкранные приложения (игры, например).
  • Сервисы / Демоны (Background Services) - работают в фоне без UI, запускаются при старте системы.
  • Плагины / Расширения, которые дополняют функционал других приложений.

Процесс разработки в NET

Прежде, чем приступать к исследованию порядка разработки приложений на платформе .NET, рассмотрим основные технологии, которые используются здесь.

Консольное приложение Приложение, которое может быть запущено в командной строке Windows, называется консольным приложением. Создание консольного приложения — это, в идеале, первый шаг для любого новичка в .Net.

Windows Forms

Windows Forms (WinForms) – старейший фреймворк Microsoft для разработки десктоп-приложений под Windows. Он строится на основе библиотеки System.Windows.Forms, которая является обёрткой над Win32 API. Все элементы управления (controls) – это «тяжёлые» окна Windows (HWND). Работает в одном потоке, UI-потоке.

Состав приложения Windows Forms:

  • App.cs – точка входа, содержит метод Main(), запускающий приложение;
  • Form1.cs / Form1.Designer.cs – главная форма (или любое другое окно). Форма – это класс, унаследованный от System.Windows.Forms.Form;
  • Controls – элементы управления (TextBox, Button, Label и т.д.), создаются программно или через дизайнер.

В WinForms всё создаётся в коде или через визуальный дизайнер в Visual Studio.

Основные элементы:

ЭлементОписание
FormОсновное окно приложения
ButtonКнопка
LabelТекстовая метка
TextBoxПоле ввода текста
RadioButtonПереключатели
CheckBoxЧекбоксы
Panel, GroupBoxКонтейнеры для группировки элементов
MenuStrip, ToolStrip
StatusStripПанель меню, инструментов, статуса

WPF

WPF (Windows Presentation Foundation) – современный фреймворк для создания настольных приложений с богатым UI, поддерживающий декларативный стиль разработки через XAML. WPF использует DirectX для отрисовки интерфейса (в отличие от GDI+ у WinForms), поддерживает MVVM паттерн.

Состав приложения WPF:

  • App.xaml – точка входа приложения, может содержать ресурсы и перехват событий;
  • MainWindows.xaml / Window – основное окно приложения;
  • XAML – язык разметки для описания UI;
  • Code-behind – файл .xaml.cs, связанный с XAML, содержит логику обработки событий;
  • Resources – стили, шаблоны, строки, изображения и т.д., определяемые в XAML.

Основные теги и элементы в XAML:

ТегОписание
<Window>Основное окно
<UserControl>Компонент, не являющийся окном
<Grid>, <StackPanel>
<DockPanel>Контейнеры компоновки
<Button>, <Label>, <TextBox>Элементы управления
<Style>Стили оформления
<Template>Шаблоны элементов
<Trigger>Триггеры изменений свойств
<ResourceDictionary>Хранение ресурсов (стилей, шаблонов и т.д.)
<Binding>Привязка данных (часть MVVM)

.NET MAUI

MAUI (Multi-platform App UI) предназначена для кроссплатформенной разработки приложений для Windows, macOS, Android, iOS. Это эволюция Xamarin.Forms, использующая XAML для описания UI, и один и тот же XAML будет отображаться как нативный элемент на каждой платформе.

Состав приложения MAUI:

  • MauiProgram.cs – точка входа, создаёт экземпляр приложения;
  • App.xaml / AppShell.xaml – глобальные стили, маршруты, темы;
  • MainPage.xaml – главная страница;
  • Platforms/ - папка с платформозависимыми настройками;
  • Resources/ - стили, изображения, цвета и т.д.

Основные теги в MAUI:

ТегОписание
<ContentPage>Одностраничное представление
<Shell>Для навигации (заменяет NavigationPage и TabbedPage)
<StackLayout>, <Grid>, <FlexLayout>Контейнеры компоновки
<Label>, <Button>, <Entry>, <Image>Элементы управления
<Style>Стили
<ResourceDictionary>Ресурсы приложения
<OnPlatform>Платформозависимые настройки
<Routing>Навигационные маршруты

Сравнительная таблица WinForms, WPF, MAUI

КритерийWinFormsWPFMAUI
Язык разметкиНет (только код)Есть (XAML)Есть (XAML)
ПлатформаТолько WindowsТолько WindowsКроссплатформа
База UIWin32 APIDirectXНативные элементы
АрхитектураПростая, событийнаяMVVM, привязки, стилиMVVM, привязки, кросс-платформа
ПроизводительностьВысокаяВысокаяЗависит от платформы
СовременностьУстаревающаяАктуальная (но замедляется развитие)Самая современная
ИспользованиеПростые десктоп-приложенияБогатые Windows-приложенияМобильные и кросс-платформенные решения

Алгоритм разработки десктопного приложения в .NET

  1. Определение целевой платформы и технологии:
    • Windows или кроссплатформа?
    • WinForms (простое), WPF (более богатый UI) или MAUI?
  2. Создание проекта в Visual Studio – выбор шаблона, указание имени проекта и пути сохранения.
  3. Организация структуры кода:

Для WinForms:

  • MyApp/:
  • Models/
  • Views/
  • Controllers/
  • Program.cs

Для WPF:

  • MyApp:/
  • Models/
  • ViewModels/
  • Views/
  • App.xaml
  • MainWindow.xaml

Для MAUI:

  • MyApp:/
  • Models/
  • ViewModels/
  • Views/
  • MauiProgram.cs
  • AppShell.xaml

Всегда надо стараться выносить логику в отдельные классы, чтобы код был чище.

  1. Проектирование макета приложения. Нужно нарисовать через специальные программы или на бумаге (а то и вовсе в голове) то, какие элементы будут на форме, как пользователь будет взаимодействовать с ними и что они должны выполнять.

Примеры – поля ввода (TextBox), кнопки (Button), Списки (ComboBox, ListBox), Метки (Label), таблицы и прочее.

В WPF и MAUI можно использовать XAML-редактор для прототипирования.

  1. Создание формы и расстановка элементов. Используя визуальный конструктор форм (дизайнер), или редактируя XAML напрямую – создаём элементы и настраиваем их свойства. Элементы можно перетаскивать с панели инструментов, а свойства настраиваются через окно Properties.

  2. Настройка обработчиков событий. Двойной клик по элементу (кнопке, допустим), создаёт метод в Form1.cs в Windows Forms. Соответственно, в WPF / MAUI настраивается всё в .xaml.cs файле – это специальный класс для обработчиков.

Словом, после создания элементов, нужно их «оживить», добавив методы в коде и привязав их к элементам.

Пример:

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Вы нажали кнопку!");
}

Здесь мы создали метод button1_Click, который привязан к элементу button1, и выполняет вывод сообщения с текстом. В WPF / MAUI к элементу добавляется атрибут Click в XAML:

<Button Text="Нажми меня" Clicked="OnButtonClicked"/>

а в .xaml.cs создаётся метод который указан в значении атрибута:

private void OnButtonClicked(object sender, EventArgs e)
{
DisplayAlert("Информация", "Кнопка нажата", "OK");
}
  1. Реализация бизнес-логики и работы с данными. Создаются модели (классы, представляющие данные), сервисы (классы для работы с БД, API, логикой), контроллеры / ViewModels (отвечающие за связь между UI и моделью).
  2. Проверка зависимостей и качества кода. Здесь нужно убедиться, что все ссылки добавлены, нет ли ошибок в логике, производится отладка, добавляются юнит-тесты, словом – финальные штрихи по оттачиванию «под капотом».
  3. Настройка внешнего вида и компоновки. Настраиваются размеры окон, цвета, шрифты, упорядочиваются элементы, применяются стили и темы.
  4. Запуск и тестирование. Проект запускается, функции тестируются, выполняется проверка того, как выглядит приложение на разных экранах и исправление багов.

Процесс разработки в Java

Процесс разработки в Java, Jetbrains Idea

Процесс разработки в Python

Процесс разработки в Python

Практическое задание
Попробуйте создать любое десктопное приложение.